#ifndef PROCESS_H_
#define PROCESS_H_

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
/* #include <bits/sigaction.h> */

#include "../constants.h"
#include "../global.h"
#include "../string/string.h"

/* Processo */
typedef struct
{
	pid_t pid; /* PID do processo */
	int ground; /* Status do processo (fg ou bg) */
	int status; /* Status do processo (running, stoped, continued) */
} process;

/* Seta os callbacks para os sinais Ctrl+C e Ctrl+Z */
void set_signals_callbacks(void);
/* Callback para os sinais Ctrl+C e Ctrl+Z */
void signal_callback(int signal);
/* Insere um processo na lista */
void process_insert(pid_t pid, int ground);
/* Remove um processo */
void process_remove(pid_t pid);
/* Envia um sinal ao processo em FG */
void process_kill_fg(int signal);
/* Remove processos que foram mortos ou sairam */
void process_remove_dead();
/* Retorna o processo que está atualmente em FG */
process *get_fg_process();
/* Retorna o processo com determinado pid */
process *get_process(pid_t pid);

#endif /* PROCESS_H_ */
